#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

/*
函数功能：模拟find函数，在指定目录下查找指定文件名的文件
函数参数：指定目录，指定文件
函数返回：成功1，失败0
*/
int my_find(const char *dir_path, const char *target_name);

int main(int argc, const char *argv[]) 
{
    my_find(argv[1], argv[2]);
    return 0;
}

int my_find(const char *dir_path, const char *target_name) 
{
    DIR *dir = opendir(dir_path);
    if (dir == NULL) {
        perror("opendir");
        return 0;
    }

    struct dirent *entry;
    while ((entry = readdir(dir))!= NULL) {
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        char path[1024];
        snprintf(path, sizeof(path), "%s/%s", dir_path, entry->d_name);

        struct stat st;
        if (lstat(path, &st) == -1) {
            perror("lstat");
            continue;
        }

        if (S_ISDIR(st.st_mode)) {
            // 如果是目录，则递归调用my_find进入子目录查找
            my_find(path, target_name);
        } else if (strcmp(entry->d_name, target_name) == 0) {
            // 如果是文件且文件名匹配，输出文件路径
            printf("找到文件: %s\n", path);
        }
    }

    closedir(dir);
    return 1;
}